home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Mail / pine3.92 / imap / RFC1176.TXT < prev    next >
Text File  |  1990-08-22  |  66KB  |  1,683 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                         M. Crispin
  8. Request for Comments: 1176                                    Washington
  9. Obsoletes: RFC 1064                                          August 1990
  10.  
  11.  
  12.               INTERACTIVE MAIL ACCESS PROTOCOL - VERSION 2
  13.  
  14.  
  15. Status of this Memo
  16.  
  17.    This RFC suggests a method for personal computers and workstations to
  18.    dynamically access mail from a mailbox server ("repository").  It
  19.    obosoletes RFC 1064.  This RFC specifies an Experimental Protocol for
  20.    the Internet community.  Discussion and suggestions for improvement
  21.    are requested.  Please refer to the current edition of the "IAB
  22.    Official Protocol Standards" for the standardization state and status
  23.    of this protocol.  Distribution of this memo is unlimited.
  24.  
  25. Introduction
  26.  
  27.    The intent of the Interactive Mail Access Protocol, Version 2 (IMAP2)
  28.    is to allow a workstation, personal computer, or similar small
  29.    machine to access electronic mail from a mailbox server.  Since the
  30.    distinction between personal computers and workstations is blurring
  31.    over time, it is desirable to have a single solution that addresses
  32.    the need in a general fashion.  IMAP2 is the "glue" of a distributed
  33.    electronic mail system consisting of a family of client and server
  34.    implementations on a wide variety of platforms, from small single-
  35.    tasking personal computing engines to complex multi-user timesharing
  36.    systems.
  37.  
  38.    Although different in many ways from the Post Office Protocols (POP2
  39.    and POP3, hereafter referred to collectively as "POP") described in
  40.    RFC 937 and RFC 1081, IMAP2 may be thought of as a functional
  41.    superset of these.  RFC 937 was used as a model for this RFC.  There
  42.    was a cognizant reason for this; POP deals with a similar problem,
  43.    albeit with a less comprehensive solution, and it was desirable to
  44.    offer a basis for comparison.
  45.  
  46.    Like POP, IMAP2 specifies a means of accessing stored mail and not of
  47.    posting mail; this function is handled by a mail transfer protocol
  48.    such as SMTP (RFC 821).
  49.  
  50.    This protocol assumes a reliable data stream such as provided by TCP
  51.    or any similar protocol.  When TCP is used, the IMAP2 server listens
  52.    on port 143.
  53.  
  54.  
  55.  
  56.  
  57.  
  58. Crispin                                                         [Page 1]
  59.  
  60. RFC 1176                         IMAP2                       August 1990
  61.  
  62.  
  63. System Model and Philosophy
  64.  
  65.    Electronic mail is a primary means of communication for the widely
  66.    spread Internet community.  The advent of distributed personal
  67.    computers and workstations has forced a significant rethinking of the
  68.    mechanisms employed to manage electronic mail.  With mainframes, each
  69.    user tends to receive and process mail at the computer he uses most
  70.    of the time, his "primary host".  The first inclination of many users
  71.    when an independent workstation is placed in front of them is to
  72.    begin receiving mail at the workstation, and many vendors have
  73.    implemented facilities to do this.  However, this approach has
  74.    several disadvantages:
  75.  
  76.       (1) Personal computers and many workstations have a software
  77.       design that gives full control of all aspects of the system to the
  78.       user at the console.  As a result, background tasks such as
  79.       receiving mail may not run for long periods of time; either
  80.       because the user is asking to use all the machine's resources, or
  81.       because the user has (perhaps accidentally) manipulated the
  82.       environment in such a way that it prevents mail reception.  In
  83.       many personal computers, the operating system is single-tasking
  84.       and this is the only mode of operation.  Any of these conditions
  85.       could lead to repeated failed delivery attempts by outside agents.
  86.  
  87.       (2) The hardware failure of a single machine can keep its user
  88.       "off the air" for a considerable time, since repair of individual
  89.       units may be delayed.  Given the growing number of personal
  90.       computers and workstations spread throughout office environments,
  91.       quick repair of such systems is not assured.  On the other hand, a
  92.       central mainframe is generally repaired soon after failure.
  93.  
  94.       (3) Personal computers and workstations are often not backed up
  95.       with as much diligence as a central mainframe, if at all.
  96.  
  97.       (4) It is more difficult to keep track of mailing addresses when
  98.       each person is associated with a distinct machine.  Consider the
  99.       difficulty in keeping track of many postal addresses or phone
  100.       numbers, particularly if there was no single address or phone
  101.       number for an organization through which you could reach any
  102.       person in that organization.  Traditionally, electronic mail on
  103.       the ARPANET involved remembering a name and one of several "hosts"
  104.       (machines) whose name reflected the organization in which the
  105.       individual worked.  This was suitable at a time when most
  106.       organizations had only one central host.  It is less satisfactory
  107.       today unless the concept of a host is changed to refer to an
  108.       organizational entity and not a particular machine.
  109.  
  110.       (5) It is difficult to keep a multitude of heterogeneous machines
  111.  
  112.  
  113.  
  114. Crispin                                                         [Page 2]
  115.  
  116. RFC 1176                         IMAP2                       August 1990
  117.  
  118.  
  119.       working properly with complex mailing protocols, making it
  120.       difficult to move forward as progress is made in electronic
  121.       communication and as new standards emerge.  Each system has to
  122.       worry about receiving incoming mail, routing and delivering
  123.       outgoing mail, formatting, storing, and providing for the
  124.       stability of mailboxes over a variety of possible filing and
  125.       mailing protocols.
  126.  
  127.    Consequently, while a personal computer or workstation may be viewed
  128.    as an Internet host in the sense that it implements TCP/IP, it should
  129.    not be viewed as the entity that contains the user's mailbox.
  130.    Instead, a mail server machine ("server", sometimes called a
  131.    "repository") should hold the mailbox, and the personal computer or
  132.    workstation (hereafter referred to as a "client") should access the
  133.    mailbox via mail transactions.
  134.  
  135.    Because the mail server machine is isolated from direct user
  136.    manipulation, it should achieve high software reliability easily,
  137.    and, as a shared resource, it should also achieve high hardware
  138.    reliability, perhaps through redundancy.  The mail server may be
  139.    accessed from arbitrary locations, allowing users to read mail across
  140.    campus, town, or country using commonly available clients.
  141.    Furthermore, the same user may access his mailbox from different
  142.    clients at different times, and multiple users may access the same
  143.    mailbox simultaneously.
  144.  
  145.    The mail server acts an an interface among users, data storage, and
  146.    other mailers.  A mail access protocol retrieves messages, accesss
  147.    and changes properties of messages, and otherwise manages mailboxes.
  148.    This differs from some approaches (e.g., Unix mail via NFS) in that
  149.    the mail access protocol is used for all message manipulations,
  150.    isolating the user and the client from all knowledge of how the data
  151.    storage is used.  This means that the mail server can use the data
  152.    storage in whatever way is most efficient to organize the mail in
  153.    that particular environment, without having to worry about storage
  154.    representation compatibility across different machines.
  155.  
  156.    A mail access protocol further differs in that it transmits
  157.    information only on demand.  A well-designed mail access protocol
  158.    requires considerably less network traffic than Unix mail via NFS,
  159.    particularly when the mail file is large.  The result is that a mail
  160.    access protocol can scale well to situations of large mailboxes or
  161.    networks with high latency or low speed.
  162.  
  163.    In defining a mail access protocol, it is important to keep in mind
  164.    that the client and server form a macrosystem, in which it should be
  165.    possible to exploit the strong points of both while compensating for
  166.    each other's weaknesses.  Furthermore, it is desirable to allow for a
  167.  
  168.  
  169.  
  170. Crispin                                                         [Page 3]
  171.  
  172. RFC 1176                         IMAP2                       August 1990
  173.  
  174.  
  175.    growth path beyond the hoary text-only RFC 822 protocol, specifically
  176.    in the area of attachments and multi-media mail, to ease the eventual
  177.    transition to ISO solutions.
  178.  
  179.    Unlike POP, IMAP2 has extensive features for remote searching and
  180.    parsing of messages on the server.  A free text search (optionally
  181.    with other searching) can be made in the entire mailbox by the server
  182.    and the results made available to the client without the client
  183.    having to transfer the entire mailbox and searching itself.  Since
  184.    remote parsing of a message into a structured (and standard format)
  185.    "envelope" is available, a client can display envelope information
  186.    and implement commands such as REPLY without having any understanding
  187.    of how to parse RFC 822, etc. headers.  The effect of this is
  188.    twofold: it further improves the ability to scale well in instances
  189.    where network traffic must be reduced, and it reduces the complexity
  190.    of the client program.
  191.  
  192.    Additionally, IMAP2 offers several facilities for managing individual
  193.    message state and the mailbox as a whole beyond the simple "delete
  194.    message" functionality of POP.  Another benefit of IMAP2 is the use
  195.    of tagged responses to reduce the possibility of synchronization
  196.    errors and the concept of state on the client (a "local cache") that
  197.    the server may update without explicit request by the client.  These
  198.    concepts and how they are used are explained under "Implementation
  199.    Discussion" below.
  200.  
  201.    In spite of this functional richness, IMAP2 is a small protocol.
  202.    Although servers should implement the full set of IMAP2 functions, a
  203.    simple client can be written that uses IMAP2 in much the way as a POP
  204.    client.
  205.  
  206.    A related protocol to POP and IMAP2 is the DMSP protocol of PCMAIL
  207.    (RFC 1056).  IMAP2 differs from DMSP more fundamentally, reflecting a
  208.    differing architecture from PCMAIL.  PCMAIL is either an online
  209.    ("interactive mode"), or offline ("batch mode") system with long-term
  210.    shared state.  Some POP based systems are also offline; in such
  211.    systems, since there is no long-term shared state POP is little more
  212.    than a download mechanism of the "mail file" to the client.  IMAP2-
  213.    based software is primarily an online system in which real-time and
  214.    simultaneous mail access were considered important.
  215.  
  216.    In PCMAIL, there is a long-term client/server relationship in which
  217.    some mailbox state is preserved on the client.  There is a
  218.    registration of clients used by a particular user, and the client
  219.    keeps a set of "descriptors" for each message that summarize the
  220.    message.  The server and client synchronize their states when the
  221.    DMSP connection starts up, and, if a client has not accessed the
  222.    server for a while, the client does a complete reset (reload) of its
  223.  
  224.  
  225.  
  226. Crispin                                                         [Page 4]
  227.  
  228. RFC 1176                         IMAP2                       August 1990
  229.  
  230.  
  231.    state from the server.
  232.  
  233.    In IMAP2-based software, the client/server relationship lasts only
  234.    for the duration of the TCP connection.  All mailbox state is
  235.    maintained on the server.  There is no registration of clients.  The
  236.    function of a descriptor is handled by a structured representation of
  237.    the message "envelope" as noted above.  There is no client/server
  238.    synchronization since the client does not remember state between
  239.    IMAP2 connections.  This is not a problem since in general the client
  240.    never needs the entire state of the mailbox in a single session,
  241.    therefore there isn't much overhead in fetching the state information
  242.    that is needed as it is needed.
  243.  
  244.    There are also some functional differences between IMAP2 and DMSP.
  245.    DMSP has functions for sending messages, printing messages, listing
  246.    mailboxes, and changing passwords; these are done outside IMAP2.
  247.    DMSP has 16 binary flags of which 8 are defined by the system.  IMAP2
  248.    has flag names; there are currently 5 defined system flag names and a
  249.    facility for some number (30 in the current implementations) of user
  250.    flag names.  IMAP2 has a sophisticated message search facility in the
  251.    server to identify interesting messages based on dates, addresses,
  252.    flag status, or textual contents without compelling the client to
  253.    fetch this data for every message.
  254.  
  255.    It was felt that maintaining state on the client is advantageous only
  256.    in those cases where the client is only used by a single user, or if
  257.    there is some means on the client to restrict access to another
  258.    user's data.  It can be a serious disadvantage in an environment in
  259.    which multiple users routinely use the same client, the same user
  260.    routinely uses different clients, and where there are no access
  261.    restrictions on the client.  It was also observed that most user mail
  262.    access is to a small set of "interesting" messages, which were either
  263.    new mail or mail based on some user-selected criteria.  Consequently,
  264.    IMAP2 was designed to easily identify those "interesting" messages so
  265.    that the client could fetch the state of those messages and not those
  266.    that were not "interesting".
  267.  
  268. The Protocol
  269.  
  270.    The IMAP2 protocol consists of a sequence of client commands and
  271.    server responses, with server data interspersed between the
  272.    responses.  Unlike most Internet protocols, commands and responses
  273.    are tagged.  That is, a command begins with a unique identifier
  274.    (typically a short alphanumeric sequence such as a Lisp "gensym"
  275.    function would generate e.g., A0001, A0002, etc.), called a tag.  The
  276.    response to this command is given the same tag from the server.
  277.    Additionally, the server may send an arbitrary amount of "unsolicited
  278.    data", which is identified by the special reserved tag of "*".  There
  279.  
  280.  
  281.  
  282. Crispin                                                         [Page 5]
  283.  
  284. RFC 1176                         IMAP2                       August 1990
  285.  
  286.  
  287.    is another special reserved tag, "+", discussed below.
  288.  
  289.    The server must be listening for a connection.  When a connection is
  290.    opened the server sends an unsolicited OK response as a greeting
  291.    message and then waits for commands.
  292.  
  293.    The client opens a connection and waits for the greeting.  The client
  294.    must not send any commands until it has received the greeting from
  295.    the server.
  296.  
  297.    Once the greeting has been received, the client may begin sending
  298.    commands and is not under any obligation to wait for a server
  299.    response to this command before sending another command, within the
  300.    constraints of TCP flow control.  When commands are received the
  301.    server acts on them and responds with command responses, often
  302.    interspersed with data.  The effect of a command can not be
  303.    considered complete until a command response with a tag matching the
  304.    command is received from the server.
  305.  
  306.    Although all known IMAP2 servers at the time of this writing process
  307.    commands to completion before processing the next command, it is not
  308.    required that a server do so.  However, many commands can affect the
  309.    results of other commands, creating processing-order dependencies
  310.    (or, for SEARCH and FIND, ambiguities about which data is associated
  311.    with which command).  All implementations that operate in a non-
  312.    lockstep fashion must recognize such dependencies and defer or
  313.    synchronize execution as necessary.  In general, such multi-
  314.    processing is limited to consecutive FETCH commands.
  315.  
  316.    Generally, the first command from the client is a LOGIN command with
  317.    user name and password arguments to establish identity and access
  318.    authorization, unless this has already been accomplished through
  319.    other means, e.g. Kerberos.  Until identity and access authorization
  320.    have been established, no operations other than LOGIN or LOGOUT are
  321.    permitted.
  322.  
  323.    Once identity and authorization have been established, the client
  324.    must send a SELECT command to access the desired mailbox; no mailbox
  325.    is selected by default.  SELECT's argument is implementation-
  326.    dependent; however the word "INBOX" must be implemented to mean the
  327.    primary or default mailbox for this user, independent of any other
  328.    server semantics.  On a successful SELECT, the server will send a
  329.    list of valid flags, number of messages, and number of messages
  330.    arrived since last access for this mailbox as unsolicited data,
  331.    followed by an OK response.  The client may terminate access to this
  332.    mailbox and access a different one with another SELECT command.
  333.  
  334.    The client reads mailbox information with FETCH commands.  The actual
  335.  
  336.  
  337.  
  338. Crispin                                                         [Page 6]
  339.  
  340. RFC 1176                         IMAP2                       August 1990
  341.  
  342.  
  343.    data is transmitted via the unsolicited data mechanism (that is,
  344.    FETCH should be viewed as instructing the server to include the
  345.    desired data along with any other data it wishes to transmit to the
  346.    client).  There are three major categories of data that may be
  347.    fetched.
  348.  
  349.    The first category is data that is associated with a message as an
  350.    entity in the mailbox.  There are now three such items of data: the
  351.    "internal date", the "RFC 822 size", and the "flags".  The internal
  352.    date is the date and time that the message was placed in the mailbox.
  353.    The RFC 822 size is subject to deletion in the future; it is the size
  354.    in bytes of the message, expressed as an RFC 822 text string.
  355.    Current clients only use it as part of a status display line.  The
  356.    flags are a list of status flags associated with the message (see
  357.    below).  All the first category data can be fetched by using the
  358.    macro-fetch word "FAST"; that is, "FAST" expands to "(FLAGS
  359.    INTERNALDATE RFC822.SIZE)".
  360.  
  361.    The second category is that data that describes the composition and
  362.    delivery information of a message; that is, information such as the
  363.    message sender, recipient lists, message-ID, subject, etc.  This is
  364.    the information that is stored in the message header in RFC 822
  365.    format message and is traditionally called the "envelope".  [Note:
  366.    this should not be confused with the SMTP (RFC 821) envelope, which
  367.    is strictly limited to delivery information.]  IMAP2 defines a
  368.    structured and unambiguous representation for the envelope that is
  369.    particularly suited for Lisp-based parsers.  A client can use the
  370.    envelope for operations such as replying and not worry about RFC 822
  371.    at all.  Envelopes are discussed in more detail below.  The first two
  372.    categories of data can be fetched together by using the macro-fetch
  373.    word "ALL"; that is, "ALL" expands to "(FLAGS INTERNALDATE
  374.    RFC822.SIZE ENVELOPE)".
  375.  
  376.    The third category is that data that is intended for direct human
  377.    viewing.  The present RFC 822 based IMAP2 defines three such items:
  378.    RFC822.HEADER, RFC822.TEXT, and RFC822 (the latter being the two
  379.    former appended together in a single text string).  RFC822.HEADER is
  380.    the "raw", unprocessed RFC 822 format header of the message.
  381.    Fetching "RFC822" is equivalent to fetching the RFC 822
  382.    representation of the message as stored on the mailbox without any
  383.    filtering or processing.
  384.  
  385.    An intelligent client will "FETCH ALL" for some (or all) of the
  386.    messages in the mailbox for use as a presentation menu, and when the
  387.    user wishes to read a particular message will "FETCH RFC822.TEXT" to
  388.    get the message body.  A more primitive client could, of course,
  389.    simply "FETCH RFC822" a`la POP-type functionality.
  390.  
  391.  
  392.  
  393.  
  394. Crispin                                                         [Page 7]
  395.  
  396. RFC 1176                         IMAP2                       August 1990
  397.  
  398.  
  399.    The client can alter certain data (currently only the flags) by a
  400.    STORE command.  As an example, a message is deleted from a mailbox by
  401.    a STORE command that includes the \DELETED flag as a flag being set.
  402.  
  403.    Other client operations include copying a message to another mailbox
  404.    (COPY command), permanently removing deleted messages (EXPUNGE
  405.    command), checking for new messages (CHECK command), and searching
  406.    for messages that match certain criteria (SEARCH command).
  407.  
  408.    The client terminates the session with the LOGOUT command.  The
  409.    server returns a "BYE" followed by an "OK".
  410.  
  411.    A Typical Scenario
  412.  
  413.            Client                          Server
  414.            ------                          ------
  415.                                        {Wait for Connection}
  416.        {Open Connection}        -->
  417.                                    <-- * OK IMAP2 Server Ready
  418.                                        {Wait for command}
  419.        A001 LOGIN Fred Secret   -->
  420.                                    <-- A001 OK User Fred logged in
  421.                                        {Wait for command}
  422.        A002 SELECT INBOX        -->
  423.                                    <-- * FLAGS (Meeting Notice \Answered
  424.                                                 \Flagged \Deleted \Seen)
  425.                                    <-- * 19 EXISTS
  426.                                    <-- * 2 RECENT
  427.                                    <-- A0002 OK Select complete
  428.                                        {Wait for command}
  429.        A003 FETCH 1:19 ALL      -->
  430.                                    <-- * 1 Fetch (......)
  431.                                            ...
  432.                                    <-- * 18 Fetch (......)
  433.                                    <-- * 19 Fetch (......)
  434.                                    <-- A003 OK Fetch complete
  435.                                        {Wait for command}
  436.        A004 FETCH 8 RFC822.TEXT -->
  437.                                    <-- * 8 Fetch (RFC822.TEXT {893}
  438.                                            ...893 characters of text...
  439.                                    <-- )
  440.                                    <-- A004 OK Fetch complete
  441.                                        {Wait for command}
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450. Crispin                                                         [Page 8]
  451.  
  452. RFC 1176                         IMAP2                       August 1990
  453.  
  454.  
  455.        A005 STORE 8 +Flags \Deleted -->
  456.                                    <-- * 8 Store (Flags (\Deleted
  457.                                                   \Seen))
  458.                                    <-- A005 OK Store complete
  459.                                        {Wait for command}
  460.        A006 EXPUNGE             -->
  461.                                    <-- * 19 EXISTS
  462.                                    <-- * 8 EXPUNGE
  463.                                    <-- * 18 EXISTS
  464.                                    <-- A006 Expunge complete
  465.                                        {Wait for command}
  466.        A007 LOGOUT              -->
  467.                                    <-- * BYE IMAP2 server quitting
  468.                                    <-- A007 OK Logout complete
  469.        {Close Connection}       --><-- {Close connection}
  470.                                        {Go back to start}
  471. Conventions
  472.  
  473.    The following terms are used in a meta-sense in the syntax
  474.    specification below:
  475.  
  476.       An ASCII-STRING is a sequence of arbitrary ASCII characters.
  477.  
  478.       An ATOM is a sequence of ASCII characters delimited by SP or CRLF.
  479.  
  480.       A CHARACTER is any ASCII character except """", "{", CR, LF, "%",
  481.       or "\".
  482.  
  483.       A CRLF is an ASCII carriage-return character followed immediately
  484.       by an ASCII linefeed character.
  485.  
  486.       A NUMBER is a sequence of the ASCII characters that represent
  487.       decimal numerals ("0" through "9"), delimited by SP, CRLF, ",", or
  488.       ":".
  489.  
  490.       A SP is the ASCII space character.
  491.  
  492.       A TEXT_LINE is a human-readable sequence of ASCII characters up to
  493.       but not including a terminating CRLF.
  494.  
  495.    A common field in the IMAP2 protocol is a STRING, which may be an
  496.    ATOM, QUOTED-STRING (a sequence of CHARACTERs inside double-quotes),
  497.    or a LITERAL.  A literal consists of an open brace ("{"), a number, a
  498.    close brace ("}"), a CRLF, and then an ASCII-STRING of n characters,
  499.    where n is the value of the number inside the brace.  In general, a
  500.    string should be represented as an ATOM or QUOTED-STRING if at all
  501.    possible.  The semantics for QUOTED-STRING or LITERAL are checked
  502.    before those for ATOM; therefore an ATOM used in a STRING may only
  503.  
  504.  
  505.  
  506. Crispin                                                         [Page 9]
  507.  
  508. RFC 1176                         IMAP2                       August 1990
  509.  
  510.  
  511.    contain CHARACTERs.  Literals are most often sent from the server to
  512.    the client; in the rare case of a client to server literal there is a
  513.    special consideration (see the "+ text" response below).
  514.  
  515.    Another important field is the SEQUENCE, which identifies a set of
  516.    messages by consecutive numbers from 1 to n where n is the number of
  517.    messages in the mailbox.  A sequence may consist of a single number,
  518.    a pair of numbers delimited by colon (equivalent to all numbers
  519.    between those two numbers), or a list of single numbers or number
  520.    pairs.  For example, the sequence 2,4:7,9,12:15 is equivalent to
  521.    2,4,5,6,7,9,12,13,14,15 and identifies all those messages.
  522.  
  523. Definitions of Commands and Responses
  524.  
  525.      Summary of Commands and Responses
  526.  
  527.        Commands                            ||      Responses
  528.        --------                            ||      -------
  529.        tag NOOP                            ||      tag OK text
  530.        tag LOGIN user password             ||      tag NO text
  531.        tag LOGOUT                          ||      tag BAD text
  532.        tag SELECT mailbox                  ||      * number message_data
  533.        tag BBOARD bulletin_board           ||      * FLAGS flag_list
  534.        tag FIND MAILBOXES pattern          ||      * SEARCH sequence
  535.        tag FIND BBOARDS pattern            ||      * BBOARD string
  536.        tag CHECK                           ||      * MAILBOX string
  537.        tag EXPUNGE                         ||      * BYE text
  538.        tag COPY sequence mailbox           ||      * OK text
  539.        tag FETCH sequence data             ||      * NO text
  540.        tag STORE sequence data value       ||      * BAD text
  541.        tag SEARCH search_program           ||      + text
  542.  
  543. Commands
  544.  
  545.    tag NOOP
  546.  
  547.       The NOOP command returns an OK to the client.  By itself, it does
  548.       nothing, but certain things may happen as side effects.  For
  549.       example, server implementations that implicitly check the mailbox
  550.       for new mail may do so as a result of this command.  The primary
  551.       use of this command is to for the client to see if the server is
  552.       still alive (and notify the server that the client is still alive,
  553.       for those servers that have inactivity autologout timers).
  554.  
  555.    tag LOGIN user password
  556.  
  557.       The LOGIN command identifies the user to the server and carries
  558.       the password authenticating this user.  This information is used
  559.  
  560.  
  561.  
  562. Crispin                                                        [Page 10]
  563.  
  564. RFC 1176                         IMAP2                       August 1990
  565.  
  566.  
  567.       by the server to control access to the mailboxes.
  568.  
  569.       EXAMPLE:  A001 LOGIN SMITH SESAME
  570.       logs in as user SMITH with password SESAME.
  571.  
  572.    tag LOGOUT
  573.  
  574.       The LOGOUT command informs the server that the client is done with
  575.       the session.  The server should send an unsolicited BYE response
  576.       before the (tagged) OK response, and then close the network
  577.       connection.
  578.  
  579.    tag SELECT mailbox
  580.  
  581.       The SELECT command selects a particular mailbox.  The server must
  582.       check that the user is permitted read access to this mailbox.
  583.       Before returning an OK to the client, the server must send the
  584.       following unsolicited data to the client:
  585.          FLAGS        mailbox's defined flags
  586.          <n> EXISTS   the number of messages in the mailbox
  587.          <n> RECENT   the number of new messages in the mailbox
  588.       in order to define the initial state of the mailbox at the client.
  589.  
  590.       Multiple SELECT commands are permitted in a session, in which case
  591.       the previous mailbox is automatically deselected when a new SELECT
  592.       is made.
  593.  
  594.       The default mailbox for the SELECT command is INBOX, which is a
  595.       special name reserved to mean "the primary mailbox for this user
  596.       on this server".  The format of other mailbox names is operating
  597.       system dependent (as of this writing, it reflects the filename
  598.       path of the mailbox file on the current servers).
  599.  
  600.       It is customary, although not required, for the text of an OK
  601.       response to the SELECT command to begin with either "[READ-ONLY]"
  602.       or "[READ-WRITE]" to show the mailbox's access status.
  603.  
  604.       EXAMPLE: A002 SELECT INBOX
  605.       selects the default mailbox.
  606.  
  607.    tag BBOARD bulletin_board
  608.  
  609.       The BBOARD command is equivalent to SELECT, and returns the same
  610.       output.  However, it differs from SELECT in that its argument is a
  611.       shared mailbox (bulletin board) name instead of an ordinary
  612.       mailbox.  The format of a bulletin name is implementation
  613.       specific, although it is strongly encouraged to use something that
  614.       resembles a name in a generic sense and not a file or mailbox name
  615.  
  616.  
  617.  
  618. Crispin                                                        [Page 11]
  619.  
  620. RFC 1176                         IMAP2                       August 1990
  621.  
  622.  
  623.       on the particular system.  There is no requirement that a bulletin
  624.       board name be a mailbox name or a file name (in particular, Unix
  625.       netnews has a completely different namespace from mailbox or file
  626.       names).
  627.  
  628.       Support for BBOARD is optional.
  629.  
  630.    tag FIND MAILBOXES pattern
  631.  
  632.       The FIND MAILBOXES command accepts as an argument a pattern
  633.       (including wildcards) that specifies some set of mailbox names
  634.       that are usable by the SELECT command.  The format of mailboxes is
  635.       implementation dependent.  The special mailbox name INBOX is not
  636.       included in the output.
  637.  
  638.       Two wildcard characters are defined; "*" specifies any number
  639.       (including zero) characters may match at this position and "%"
  640.       specifies a single character may match at this position.  For
  641.       example, FOO*BAR will match FOOBAR, FOOD.ON.THE.BAR and FOO.BAR,
  642.       whereas FOO%BAR will match only FOO.BAR.  "*" will match all
  643.       mailboxes.
  644.  
  645.       The FIND MAILBOXES command will return some set of unsolicited
  646.       MAILBOX replies that have as their value a single mailbox name.
  647.  
  648.       EXAMPLE:  A002 FIND MAILBOXES *
  649.                 * MAILBOX FOOBAR
  650.                 * MAILBOX GENERAL
  651.                 A002 FIND completed
  652.  
  653.       Although the use of explicit file or path names for mailboxes is
  654.       discouraged by this standard, it may be unavoidable.  It is
  655.       important that the value returned in the MAILBOX unsolicited reply
  656.       be usable in the SELECT command without remembering any path
  657.       specification that may have been used in the FIND MAILBOXES
  658.       pattern.
  659.  
  660.       Support for FIND MAILBOXES is optional.  If a client's attempt
  661.       returns BAD as a response then the client can make no assumptions
  662.       about what mailboxes exist on the server other than INBOX.
  663.  
  664.    tag FIND BBOARDS pattern
  665.  
  666.       The FIND BBOARDS command accepts as an argument a pattern that
  667.       specifies some set of bulletin board names that are usable by the
  668.       BBOARD command.  Wildcards are permitted as in FIND MAILBOXES.
  669.  
  670.       The FIND BBOARDS command will return some set of unsolicited
  671.  
  672.  
  673.  
  674. Crispin                                                        [Page 12]
  675.  
  676. RFC 1176                         IMAP2                       August 1990
  677.  
  678.  
  679.       BBOARD replies that have as their value a single bulletin board
  680.       name.
  681.  
  682.       EXAMPLE:  A002 FIND BBOARDS *
  683.                 * BBOARD FOOBAR
  684.                 * BBOARD GENERAL
  685.                 A002 FIND completed
  686.  
  687.       Support for FIND BBOARDS is optional.  If a client's attempt
  688.       returns BAD as a response then the client can make no assumptions
  689.       about what bulletin boards exist on the server, or that they exist
  690.       at all.
  691.  
  692.    tag CHECK
  693.  
  694.       The CHECK command forces a check for new messages and a rescan of
  695.       the mailbox for internal change for those implementations that
  696.       allow multiple simultaneous read/write access to the same mailbox.
  697.       It is recommend that periodic implicit checks for new mail be done
  698.       by servers as well.  The server should send unsolicited EXISTS and
  699.       RECENT responses with the current status before returning an OK to
  700.       the client.
  701.  
  702.    tag EXPUNGE
  703.  
  704.       The EXPUNGE command permanently removes all messages with the
  705.       \DELETED flag set in its flags from the mailbox.  Before returning
  706.       an OK to the client, for each message that is removed, an
  707.       unsolicited EXPUNGE response is sent.  The message number for each
  708.       successive message in the mailbox is immediately decremented by 1;
  709.       this means that if the last 5 messages in a 9-message mail file
  710.       are expunged you will receive 5 unsolicited EXPUNGE responses for
  711.       message 5.  To ensure mailbox integrity and server/client
  712.       synchronization, it is recommended that the server do an implicit
  713.       check before commencing the expunge and again when the expunge is
  714.       completed.  Furthermore, if the server allows multiple
  715.       simultaneous access to the same mail file the server must lock the
  716.       mail file for exclusive access while an expunge is taking place.
  717.  
  718.       EXPUNGE is not allowed if the user does not have write access to
  719.       this mailbox.
  720.  
  721.    tag COPY sequence mailbox
  722.  
  723.       The COPY command copies the specified message(s) to the specified
  724.       destination mailbox.  If the destination mailbox does not exist,
  725.       the server should create it.  Before returning an OK to the
  726.       client, the server should return an unsolicited <n> COPY response
  727.  
  728.  
  729.  
  730. Crispin                                                        [Page 13]
  731.  
  732. RFC 1176                         IMAP2                       August 1990
  733.  
  734.  
  735.       for each message copied.  A copy should set the \SEEN flag for all
  736.       messages that were successfully copied (provided, of course, that
  737.       the user has write access to this mailbox).
  738.  
  739.       EXAMPLE:  A003 COPY 2:4 MEETING
  740.       copies messages 2, 3, and 4 to mailbox "MEETING".
  741.  
  742.       COPY is not allowed if the user does not have write access to the
  743.       destination mailbox.
  744.  
  745.    tag FETCH sequence data
  746.  
  747.       The FETCH command retrieves data associated with a message in the
  748.       mailbox.  The data items to be fetched may be either a single atom
  749.       or an S-expression list.  The currently defined data items that
  750.       can be fetched are:
  751.  
  752.       ALL             Macro equivalent to:
  753.                       (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)
  754.  
  755.       ENVELOPE        The envelope of the message.  The envelope is
  756.                       computed by the server by parsing the RFC 822
  757.                       header into the component parts, defaulting
  758.                       various fields as necessary.
  759.  
  760.       FAST            Macro equivalent to:
  761.                       (FLAGS INTERNALDATE RFC822.SIZE)
  762.  
  763.       FLAGS           The flags that are set for this message.
  764.                       This may include the following system flags:
  765.  
  766.                               \RECENT    Message arrived since the
  767.                                           previous time this mailbox
  768.                                           was read
  769.                               \SEEN      Message has been read
  770.                               \ANSWERED  Message has been answered
  771.                               \FLAGGED   Message is "flagged" for
  772.                                           urgent/special attention
  773.                               \DELETED   Message is "deleted" for
  774.                                           removal by later EXPUNGE
  775.  
  776.       INTERNALDATE    The date and time the message was written to
  777.                       the mailbox.
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786. Crispin                                                        [Page 14]
  787.  
  788. RFC 1176                         IMAP2                       August 1990
  789.  
  790.  
  791.       RFC822          The message in RFC 822 format.  The \SEEN
  792.                       flag is implicitly set; if this causes the
  793.                       flags to change they should be included as
  794.                       part of the fetch results.  This is the
  795.                       concatenation of RFC822.HEADER and RFC822.TEXT.
  796.  
  797.       RFC822.HEADER   The "raw" RFC 822 format header of the message
  798.                       as stored on the server.
  799.  
  800.       RFC822.SIZE     The number of characters in the message as
  801.                       expressed in RFC 822 format.
  802.  
  803.       RFC822.TEXT     The text body of the message, omitting the
  804.                       RFC 822 header.  The \SEEN flag is implicitly
  805.                       set as with RFC822 above.
  806.  
  807.       EXAMPLES:
  808.  
  809.       A003 FETCH 2:4 ALL
  810.          fetches the flags, internal date, RFC 822 size, and envelope
  811.          for messages 2, 3, and 4.
  812.  
  813.       A004 FETCH 3 RFC822
  814.          fetches the RFC 822 representation for message 3.
  815.  
  816.       A005 FETCH 4 (FLAGS RFC822.HEADER)
  817.          fetches the flags and RFC 822 format header for message 4.
  818.  
  819.       Note: An attempt to FETCH already-transmitted data may have no
  820.       result.  See the Implementation Discussion below.
  821.  
  822.    tag STORE sequence data value
  823.  
  824.       The STORE command alters data associated with a message in the
  825.       mailbox.  The currently defined data items that can be stored are:
  826.  
  827.          FLAGS           Replace the flags for the message with the
  828.                          argument (in flag list format).
  829.  
  830.          +FLAGS          Add the flags in the argument to the
  831.                          message's flag list.
  832.  
  833.          -FLAGS          Remove the flags in the argument from the
  834.                          message's flag list.
  835.  
  836.       STORE is not allowed if the user does not have write access to
  837.       this mailbox.
  838.  
  839.  
  840.  
  841.  
  842. Crispin                                                        [Page 15]
  843.  
  844. RFC 1176                         IMAP2                       August 1990
  845.  
  846.  
  847.       EXAMPLE:  A003 STORE 2:4 +FLAGS (\DELETED)
  848.       marks messages 2, 3, and 4 for deletion.
  849.  
  850.    tag SEARCH search_criteria
  851.  
  852.       The SEARCH command searches the mailbox for messages that match
  853.       the given set of criteria.  The unsolicited SEARCH <1#number>
  854.       response from the server is a list of messages that express the
  855.       intersection (AND function) of all the messages which match that
  856.       criteria.  For example,
  857.               A003 SEARCH DELETED FROM "SMITH" SINCE 1-OCT-87
  858.       returns the message numbers for all deleted messages from Smith
  859.       that were placed in the mail file since October 1, 1987.
  860.  
  861.       In all search criteria which use strings, a message matches the
  862.       criteria if the string is a case-independent substring of that
  863.       field.  The currently defined criteria are:
  864.  
  865.       ALL             All messages in the mailbox; the default
  866.                       initial criterion for ANDing.
  867.  
  868.       ANSWERED        Messages with the \ANSWERED flag set.
  869.  
  870.       BCC string      Messages which contain the specified string
  871.                       in the envelope's BCC field.
  872.  
  873.       BEFORE date     Messages whose internal date is earlier than
  874.                       the specified date.
  875.  
  876.       BODY string     Messages which contain the specified string
  877.                       in the body of the message.
  878.  
  879.       CC string       Messages which contain the specified string
  880.                       in the envelope's CC field.
  881.  
  882.       DELETED         Messages with the \DELETED flag set.
  883.  
  884.       FLAGGED         Messages with the \FLAGGED flag set.
  885.  
  886.       FROM string     Messages which contain the specified string
  887.                       in the envelope's FROM field.
  888.  
  889.       KEYWORD flag    Messages with the specified flag set.
  890.  
  891.       NEW             Messages which have the \RECENT flag set but
  892.                       not the \SEEN flag.  This is functionally
  893.                       equivalent to "RECENT UNSEEN".
  894.  
  895.  
  896.  
  897.  
  898. Crispin                                                        [Page 16]
  899.  
  900. RFC 1176                         IMAP2                       August 1990
  901.  
  902.  
  903.       OLD             Messages which do not have the \RECENT flag
  904.                       set.
  905.  
  906.       ON date         Messages whose internal date is the same as
  907.                       the specified date.
  908.  
  909.       RECENT          Messages which have the \RECENT flag set.
  910.  
  911.       SEEN            Messages which have the \SEEN flag set.
  912.  
  913.       SINCE date      Messages whose internal date is later than
  914.                       the specified date.
  915.  
  916.       SUBJECT string  Messages which contain the specified string
  917.                       in the envelope's SUBJECT field.
  918.  
  919.       TEXT string     Messages which contain the specified string.
  920.  
  921.       TO string       Messages which contain the specified string in
  922.                       the envelope's TO field.
  923.  
  924.       UNANSWERED      Messages which do not have the \ANSWERED flag
  925.                       set.
  926.  
  927.       UNDELETED       Messages which do not have the \DELETED flag
  928.                       set.
  929.  
  930.       UNFLAGGED       Messages which do not have the \FLAGGED flag
  931.                       set.
  932.  
  933.       UNKEYWORD flag  Messages which do not have the specified flag
  934.                       set.
  935.  
  936.       UNSEEN          Messages which do not have the \SEEN flag set.
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954. Crispin                                                        [Page 17]
  955.  
  956. RFC 1176                         IMAP2                       August 1990
  957.  
  958.  
  959. Responses
  960.  
  961.    tag OK text
  962.  
  963.       This response identifies successful completion of the command with
  964.       that tag.  The text is a line of human-readable text that may be
  965.       useful in a protocol telemetry log for debugging purposes.
  966.  
  967.    tag NO text
  968.  
  969.       This response identifies unsuccessful completion of the command
  970.       with that tag.  The text is a line of human-readable text that
  971.       probably should be displayed to the user in an error report by the
  972.       client.
  973.  
  974.    tag BAD text
  975.  
  976.       This response identifies faulty protocol received from the client;
  977.       The text is a line of human-readable text that should be recorded
  978.       in any telemetry as part of a bug report to the maintainer of the
  979.       client.
  980.  
  981.    * number message_data
  982.  
  983.       This response occurs as a result of several different commands.
  984.       The message_data is one of the following:
  985.  
  986.       EXISTS  The specified number of messages exists in the mailbox.
  987.  
  988.       RECENT  The specified number of messages have arrived since the
  989.               previous time this mailbox was read.
  990.  
  991.       EXPUNGE The specified message number has been permanently
  992.               removed from the mailbox, and the next message in the
  993.               mailbox (if any) becomes that message number.
  994.  
  995.       STORE data
  996.               Obsolete and functionally equivalent to FETCH.
  997.  
  998.       FETCH data
  999.               This is the principle means by which data about a
  1000.               message is returned to the client.  The data is in a
  1001.               Lisp-like S-expression property list form.  The current
  1002.               properties are:
  1003.  
  1004.          ENVELOPE     An S-expression format list that describes the
  1005.                       envelope of a message.  The envelope is computed
  1006.                       by the server by parsing the RFC 822 header into
  1007.  
  1008.  
  1009.  
  1010. Crispin                                                        [Page 18]
  1011.  
  1012. RFC 1176                         IMAP2                       August 1990
  1013.  
  1014.  
  1015.                       the component parts, defaulting various fields
  1016.                       as necessary.
  1017.  
  1018.                       The fields of the envelope are in the following
  1019.                       order: date, subject, from, sender, reply-to, to,
  1020.                       cc, bcc, in-reply-to, and message-id.  The date,
  1021.                       subject, in-reply-to, and message-id fields are
  1022.                       strings.  The from, sender, reply-to, to, cc,
  1023.                       and bcc fields are lists of addresses.
  1024.  
  1025.                       An address is an S-expression format list that
  1026.                       describes an electronic mail address.  The fields
  1027.                       of an address are in the following order:
  1028.                       personal name, source-route (a.k.a. the
  1029.                       at-domain-list in SMTP), mailbox name, and
  1030.                       host name.
  1031.  
  1032.                       Any field of an envelope or address that is
  1033.                       not applicable is presented as the atom NIL.
  1034.                       Note that the server must default the reply-to
  1035.                       and sender fields from the from field; a client is
  1036.                       not expected to know to do this.
  1037.  
  1038.          FLAGS        An S-expression format list of flags that are set
  1039.                       for this message.  This may include the following
  1040.                       system flags:
  1041.  
  1042.                       \RECENT       Message arrived since the
  1043.                                      previous time this mailbox
  1044.                                      was read
  1045.                       \SEEN         Message has been read
  1046.                       \ANSWERED     Message has been answered
  1047.                       \FLAGGED      Message is "flagged" for
  1048.                                      urgent/special attention
  1049.                       \DELETED      Message is "deleted" for
  1050.                                      removal by later EXPUNGE
  1051.  
  1052.          INTERNALDATE  A string containing the date and time the
  1053.                        message was written to the mailbox.
  1054.  
  1055.          RFC822        A string expressing the message in RFC 822
  1056.                        format.
  1057.  
  1058.          RFC822.HEADER A string expressing the RFC 822 format
  1059.                        header of the message
  1060.  
  1061.          RFC822.SIZE   A number indicating the number of
  1062.                        characters in the message as expressed
  1063.  
  1064.  
  1065.  
  1066. Crispin                                                        [Page 19]
  1067.  
  1068. RFC 1176                         IMAP2                       August 1990
  1069.  
  1070.  
  1071.                        in RFC 822 format.
  1072.  
  1073.          RFC822.TEXT   A string expressing the text body of the
  1074.                        message, omitting the RFC 822 header.
  1075.  
  1076.    * FLAGS flag_list
  1077.  
  1078.       This response occurs as a result of a SELECT command.  The flag
  1079.       list are the list of flags (at a minimum, the system-defined
  1080.       flags) that are applicable for this mailbox.  Flags other than the
  1081.       system flags are a function of the server implementation.
  1082.  
  1083.    * SEARCH number(s)
  1084.  
  1085.       This response occurs as a result of a SEARCH command.  The
  1086.       number(s) refer to those messages that match the search criteria.
  1087.       Each number is delimited by a space, e.g., "SEARCH 2 3 6".
  1088.  
  1089.    * BBOARD string
  1090.  
  1091.       This response occurs as a result of a FIND BBOARDS command.  The
  1092.       string is a bulletin board name that matches the pattern in the
  1093.       command.
  1094.  
  1095.    * MAILBOX string
  1096.  
  1097.       This response occurs as a result of a FIND MAILBOXES command.  The
  1098.       string is a mailbox name that matches the pattern in the command.
  1099.  
  1100.    * BYE text
  1101.  
  1102.       This response identifies that the server is about to close the
  1103.       connection.  The text is a line of human-readable text that should
  1104.       be displayed to the user in a status report by the client.  This
  1105.       may be sent as part of a normal logout sequence, or as a panic
  1106.       shutdown announcement by the server.  It is also used by some
  1107.       servers as an announcement of an inactivity autologout.
  1108.  
  1109.    * OK text
  1110.  
  1111.       This response identifies normal operation on the server.  No
  1112.       special action by the client is called for, however, the text
  1113.       should be displayed to the user in some fashion.  This is
  1114.       currently only used by servers at startup as a greeting message to
  1115.       show they are ready to accept the first command.
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122. Crispin                                                        [Page 20]
  1123.  
  1124. RFC 1176                         IMAP2                       August 1990
  1125.  
  1126.  
  1127.    * NO text
  1128.  
  1129.       This response identifies a warning from the server that does not
  1130.       affect the overall results of any particular request.  The text is
  1131.       a line of human-readable text that should be presented to the user
  1132.       as a warning of improper operation.
  1133.  
  1134.    * BAD text
  1135.  
  1136.       This response identifies a serious error at the server; it may
  1137.       also indicate faulty protocol from the client in which a tag could
  1138.       not be parsed.  The text is a line of human-readable text that
  1139.       should be presented to the user as a serious or possibly fatal
  1140.       error.  It should also be recorded in any telemetry as part of a
  1141.       bug report to the maintainer of the client and server.
  1142.  
  1143.    + text
  1144.  
  1145.       This response identifies that the server is ready to accept the
  1146.       text of a literal from the client.  Normally, a command from the
  1147.       client is a single text line.  If the server detects an error in
  1148.       the command, it can simply discard the remainder of the line.  It
  1149.       cannot do this for commands that contain literals, since a literal
  1150.       can be an arbitrarily long amount of text, and the server may not
  1151.       even be expecting a literal.  This mechanism is provided so the
  1152.       client knows not to send a literal until the server expects it,
  1153.       preserving client/server synchronization.
  1154.  
  1155.       In practice, this condition is rarely encountered.  In the current
  1156.       protocol, the only client command likely to contain a literal is
  1157.       the LOGIN command.  Consider a server that validates the user
  1158.       before checking the password.  If the password contains "funny"
  1159.       characters and hence is sent as a literal, then if the user is
  1160.       invalid an error would occur before the password is parsed.
  1161.  
  1162.       No such synchronization protection is provided for literals sent
  1163.       from the server to the client, for performance reasons.  Any
  1164.       synchronization problems in this direction would be caused by a
  1165.       bug in the client or server.
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178. Crispin                                                        [Page 21]
  1179.  
  1180. RFC 1176                         IMAP2                       August 1990
  1181.  
  1182.  
  1183. Sample IMAP2 session
  1184.  
  1185.    The following is a transcript of an IMAP2 session.  Server output is
  1186.    identified by "S:" and client output by "U:".  In cases where lines
  1187.    are too long to fit within the boundaries of this document, the line
  1188.    is continued on the next line.
  1189.  
  1190.    S:   * OK SUMEX-AIM.Stanford.EDU Interim Mail Access Protocol II Service
  1191.          6.1(349) at Thu, 9 Jun 88 14:58:30 PDT
  1192.    U:   a001 login crispin secret
  1193.    S:   a002 OK User CRISPIN logged in at Thu, 9 Jun 88 14:58:42 PDT, job 76
  1194.    U:   a002 select inbox
  1195.    S:   * FLAGS (Bugs SF Party Skating Meeting Flames Request AI Question
  1196.          Note \XXXX \YYYY \Answered \Flagged \Deleted \Seen)
  1197.    S:   * 16 EXISTS
  1198.    S:   * 0 RECENT
  1199.    S:   a002 OK Select complete
  1200.    U:   a003 fetch 16 all
  1201.    S:   * 16 Fetch (Flags (\Seen) InternalDate " 9-Jun-88 12:55:44 PDT"
  1202.          RFC822.Size 637 Envelope ("Sat, 4 Jun 88 13:27:11 PDT"
  1203.          "INFO-MAC Mail Message" (("Larry Fagan" NIL "FAGAN"
  1204.          "SUMEX-AIM.Stanford.EDU")) (("Larry Fagan" NIL "FAGAN"
  1205.          "SUMEX-AIM.Stanford.EDU")) (("Larry Fagan" NIL "FAGAN"
  1206.          "SUMEX-AIM.Stanford.EDU")) ((NIL NIL "rindflEISCH"
  1207.          "SUMEX-AIM.Stanford.EDU")) NIL NIL NIL
  1208.          "<12403828905.13.FAGAN@SUMEX-AIM.Stanford.EDU>"))
  1209.    S:   a003 OK Fetch completed
  1210.    U:   a004 fetch 16 rfc822
  1211.    S:   * 16 Fetch (RFC822 {637}
  1212.    S:   Mail-From: RINDFLEISCH created at  9-Jun-88 12:55:43
  1213.    S:   Mail-From: FAGAN created at  4-Jun-88 13:27:12
  1214.    S:   Date: Sat, 4 Jun 88 13:27:11 PDT
  1215.    S:   From: Larry Fagan  <FAGAN@SUMEX-AIM.Stanford.EDU>
  1216.    S:   To: rindflEISCH@SUMEX-AIM.Stanford.EDU
  1217.    S:   Subject: INFO-MAC Mail Message
  1218.    S:   Message-ID: <12403828905.13.FAGAN@SUMEX-AIM.Stanford.EDU>
  1219.    S:   ReSent-Date: Thu, 9 Jun 88 12:55:43 PDT
  1220.    S:   ReSent-From: TC Rindfleisch <Rindfleisch@SUMEX-AIM.Stanford.EDU>
  1221.    S:   ReSent-To: Yeager@SUMEX-AIM.Stanford.EDU,
  1222.          Crispin@SUMEX-AIM.Stanford.EDU
  1223.    S:   ReSent-Message-ID:
  1224.          <12405133897.80.RINDFLEISCH@SUMEX-AIM.Stanford.EDU>
  1225.    S:
  1226.    S:   The file is <info-mac>usenetv4-55.arc  ...
  1227.    S:   Larry
  1228.    S:   -------
  1229.    S:   )
  1230.    S:   a004 OK Fetch completed
  1231.  
  1232.  
  1233.  
  1234. Crispin                                                        [Page 22]
  1235.  
  1236. RFC 1176                         IMAP2                       August 1990
  1237.  
  1238.  
  1239.    U:   a005 logout
  1240.    S:   * BYE DEC-20 IMAP II server terminating connection
  1241.    S:   a005 OK SUMEX-AIM.Stanford.EDU Interim Mail Access Protocol
  1242.          Service logout
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261.  
  1262.  
  1263.  
  1264.  
  1265.  
  1266.  
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290. Crispin                                                        [Page 23]
  1291.  
  1292. RFC 1176                         IMAP2                       August 1990
  1293.  
  1294.  
  1295. Implementation Discussion
  1296.  
  1297.    There are several advantages to the scheme of tags and unsolicited
  1298.    responses.  First, the infamous synchronization problems of SMTP and
  1299.    similar protocols do not happen with tagged commands; a command is
  1300.    not considered satisfied until a response with the same tag is seen.
  1301.    Tagging allows an arbitrary amount of other responses ("unsolicited"
  1302.    data) to be sent by the server with no possibility of the client
  1303.    losing synchronization.  Compare this with the problems that FTP or
  1304.    SMTP clients have with continuation, partial completion, and
  1305.    commentary reply codes.
  1306.  
  1307.    Another advantage is that a non-lockstep client implementation is
  1308.    possible.  The client could send a command, and entrust the handling
  1309.    of the server responses to a different process that would signal the
  1310.    client when the tagged response comes in.  Under certain
  1311.    circumstances, the client may have more than one command outstanding.
  1312.  
  1313.    It was observed that synchronization problems can occur with literals
  1314.    if the literal is not recognized as such.  Fortunately, the cases in
  1315.    which this can happen are rare; a mechanism (the special "+" tag
  1316.    response) was introduced to handle those few cases.  The proper way
  1317.    to address this problem is probably to move towards a record-oriented
  1318.    architecture instead of the text stream model provided by TCP.
  1319.  
  1320.    An IMAP2 client must maintain a local cache of data from the mailbox.
  1321.    This cache is an incomplete model of the mailbox, and at startup is
  1322.    empty.  A listener processes all unsolicited data, and updates the
  1323.    cache based on this data.  If a tagged response arrives, the listener
  1324.    unblocks the process that sent the tagged request.
  1325.  
  1326.    Unsolicited data needs some discussion.  Unlike most protocols, in
  1327.    which the server merely does the client's bidding, an IMAP2 server
  1328.    has a semi-autonomous role.  By sending "unsolicited data", the
  1329.    server is in effect sending a command to the client -- to update or
  1330.    extend the client's cache with new information from the server.  In
  1331.    other words, a "fetch" command is merely a request to the server to
  1332.    ensure that the client's cache has the most up-to-date version of the
  1333.    requested information.  A server acknowledgement to the "fetch" is a
  1334.    statement that all the requested data has been sent.
  1335.  
  1336.    Although no current server does this, a server is not obliged by the
  1337.    protocol to send data that it has already sent and is unchanged.  An
  1338.    exception to this is the actual message text fetching operations
  1339.    (RFC822, RFC822.HEADER, and RFC822.TEXT), owing to the possibly
  1340.    excessive resource consumption of maintaining this data in a cache.
  1341.    It can not be assumed that a FETCH will transmit any data; only that
  1342.    an OK to the FETCH means that the client's cache has the most up-to-
  1343.  
  1344.  
  1345.  
  1346. Crispin                                                        [Page 24]
  1347.  
  1348. RFC 1176                         IMAP2                       August 1990
  1349.  
  1350.  
  1351.    date information.
  1352.  
  1353.    When a mailbox is selected, the initial unsolicited data from the
  1354.    server arrives.  The first piece of data is the number of messages.
  1355.    By sending a new EXISTS unsolicited data message the server causes
  1356.    the client to resize its cache (this is how newly arrived mail is
  1357.    handled).  If the client attempts to access information from the
  1358.    cache, it will encounter empty spots that will trigger "fetch"
  1359.    requests.  The request would be sent, some unsolicited data including
  1360.    the answer to the fetch will flow back, and then the "fetch" response
  1361.    will unblock the client.
  1362.  
  1363.    People familiar with demand-paged virtual memory operating system
  1364.    design will recognize this model as being similar to page-fault
  1365.    handling on a demand-paged system.
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.  
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402. Crispin                                                        [Page 25]
  1403.  
  1404. RFC 1176                         IMAP2                       August 1990
  1405.  
  1406.  
  1407. Formal Syntax
  1408.  
  1409.    The following syntax specification uses the augmented Backus-Naur
  1410.    Form (BNF) notation as specified in RFC 822 with one exception; the
  1411.    delimiter used with the "#" construct is a single space (SP) and not
  1412.    a comma.
  1413.  
  1414.    address         ::= "(" addr_name SP addr_adl SP addr_mailbox SP
  1415.                        addr_host ")"
  1416.  
  1417.    addr_adl        ::= nil / string
  1418.  
  1419.    addr_host       ::= nil / string
  1420.  
  1421.    addr_mailbox    ::= nil / string
  1422.  
  1423.    addr_name       ::= nil / string
  1424.  
  1425.    bboard          ::= "BBOARD" SP string
  1426.  
  1427.    check           ::= "CHECK"
  1428.  
  1429.    copy            ::= "COPY" SP sequence SP mailbox
  1430.  
  1431.    data            ::= ("FLAGS" SP flag_list / "SEARCH" SP 1#number /
  1432.                        "BYE" SP text_line / "OK" SP text_line /
  1433.                        "NO" SP text_line / "BAD" SP text_line)
  1434.  
  1435.    date            ::= string in form "dd-mmm-yy hh:mm:ss-zzz"
  1436.  
  1437.    envelope        ::= "(" env_date SP env_subject SP env_from SP
  1438.                        env_sender SP env_reply-to SP env_to SP
  1439.                        env_cc SP env_bcc SP env_in-reply-to SP
  1440.                        env_message-id ")"
  1441.  
  1442.    env_bcc         ::= nil / "(" 1*address ")"
  1443.  
  1444.    env_cc          ::= nil / "(" 1*address ")"
  1445.  
  1446.    env_date        ::= string
  1447.  
  1448.    env_from        ::= nil / "(" 1*address ")"
  1449.  
  1450.    env_in-reply-to ::= nil / string
  1451.  
  1452.    env_message-id  ::= nil / string
  1453.  
  1454.    env_reply-to    ::= nil / "(" 1*address ")"
  1455.  
  1456.  
  1457.  
  1458. Crispin                                                        [Page 26]
  1459.  
  1460. RFC 1176                         IMAP2                       August 1990
  1461.  
  1462.  
  1463.    env_sender      ::= nil / "(" 1*address ")"
  1464.  
  1465.    env_subject     ::= nil / string
  1466.  
  1467.    env_to          ::= nil / "(" 1*address ")"
  1468.  
  1469.    expunge         ::= "EXPUNGE"
  1470.  
  1471.    fetch           ::= "FETCH" SP sequence SP ("ALL" / "FAST" /
  1472.                        fetch_att / "(" 1#fetch_att ")")
  1473.  
  1474.    fetch_att       ::= "ENVELOPE" / "FLAGS" / "INTERNALDATE" /
  1475.                        "RFC822" / "RFC822.HEADER" / "RFC822.SIZE" /
  1476.                        "RFC822.TEXT"
  1477.  
  1478.    find            ::= "FIND" SP find_option SP string
  1479.  
  1480.    find_option     ::= "MAILBOXES" / "BBOARDS"
  1481.  
  1482.    flag_list       ::= ATOM / "(" 1#ATOM ")"
  1483.  
  1484.    literal         ::= "{" NUMBER "}" CRLF ASCII-STRING
  1485.  
  1486.    login           ::= "LOGIN" SP userid SP password
  1487.  
  1488.    logout          ::= "LOGOUT"
  1489.  
  1490.    mailbox         ::= "INBOX" / string
  1491.  
  1492.    msg_copy        ::= "COPY"
  1493.  
  1494.    msg_data        ::= (msg_exists / msg_recent / msg_expunge /
  1495.                        msg_fetch / msg_copy)
  1496.  
  1497.    msg_exists      ::= "EXISTS"
  1498.  
  1499.    msg_expunge     ::= "EXPUNGE"
  1500.  
  1501.    msg_fetch       ::= ("FETCH" / "STORE") SP "(" 1#("ENVELOPE" SP
  1502.                         envelope / "FLAGS" SP "(" 1#(recent_flag
  1503.                         flag_list) ")" / "INTERNALDATE" SP date /
  1504.                         "RFC822" SP string / "RFC822.HEADER" SP string /
  1505.                         "RFC822.SIZE" SP NUMBER / "RFC822.TEXT" SP
  1506.                         string) ")"
  1507.  
  1508.    msg_recent      ::= "RECENT"
  1509.  
  1510.    msg_num         ::= NUMBER
  1511.  
  1512.  
  1513.  
  1514. Crispin                                                        [Page 27]
  1515.  
  1516. RFC 1176                         IMAP2                       August 1990
  1517.  
  1518.  
  1519.    nil             ::= "NIL"
  1520.  
  1521.    noop            ::= "NOOP"
  1522.  
  1523.    password        ::= string
  1524.  
  1525.    recent_flag     ::= "\RECENT"
  1526.  
  1527.    ready           ::= "+" SP text_line
  1528.  
  1529.    request         ::= tag SP (noop / login / logout / select / check /
  1530.                        expunge / copy / fetch / store / search / find /
  1531.                        bboard) CRLF
  1532.  
  1533.    response        ::= tag SP ("OK" / "NO" / "BAD") SP text_line CRLF
  1534.  
  1535.    search          ::= "SEARCH" SP 1#("ALL" / "ANSWERED" /
  1536.                        "BCC" SP string / "BEFORE" SP string /
  1537.                        "BODY" SP string / "CC" SP string / "DELETED" /
  1538.                        "FLAGGED" / "KEYWORD" SP atom / "NEW" / "OLD" /
  1539.                        "ON" SP string / "RECENT" / "SEEN" /
  1540.                        "SINCE" SP string / "TEXT" SP string /
  1541.                        "TO" SP string / "UNANSWERED" / "UNDELETED" /
  1542.                        "UNFLAGGED" / "UNKEYWORD" / "UNSEEN")
  1543.  
  1544.    select          ::= "SELECT" SP mailbox
  1545.  
  1546.    sequence        ::= NUMBER / (NUMBER "," sequence) / (NUMBER ":"
  1547.                        sequence)
  1548.  
  1549.    store           ::= "STORE" SP sequence SP store_att
  1550.  
  1551.    store_att       ::= ("+FLAGS" SP flag_list / "-FLAGS" SP flag_list /
  1552.                        "FLAGS" SP flag_list)
  1553.  
  1554.    string          ::= atom / """" 1*character """" / literal
  1555.  
  1556.    system_flags    ::= "\ANSWERED" SP "\FLAGGED" SP "\DELETED" SP
  1557.                        "\SEEN"
  1558.  
  1559.    tag             ::= atom
  1560.  
  1561.    unsolicited     ::= "*" SP (msg_num SP msg_data / data) CRLF
  1562.  
  1563.    userid          ::= string
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570. Crispin                                                        [Page 28]
  1571.  
  1572. RFC 1176                         IMAP2                       August 1990
  1573.  
  1574.  
  1575. Implementation Status
  1576.  
  1577.    This information is current as of this writing.
  1578.  
  1579.    The University of Washington has developed an electronic mail client
  1580.    library called the "C-Client". It provides complete IMAP2, SMTP, and
  1581.    local mailbox (both /usr/spool/mail and mail.txt formats) services in
  1582.    a well-defined way to a user interface main program.  Using the C-
  1583.    Client, the University of Washington has created an operational
  1584.    client for BSD Unix and two operational clients (one basic, one
  1585.    advanced) for the NeXT.
  1586.  
  1587.    Stanford University/SUMEX has developed operational IMAP2 clients for
  1588.    Xerox Lisp machines, Texas Instruments Explorers, and the Apple
  1589.    Macintosh.  The core of the Macintosh client is an early version of
  1590.    the C-Client.  SUMEX has also developed IMAP2 servers for TOPS-20 and
  1591.    BSD Unix.
  1592.  
  1593.    All of the above software is in production use, with enthusiastic
  1594.    local user communities.  Active development continues on the
  1595.    Macintosh and C-Client based clients and the BSD Unix server.  This
  1596.    software is freely available from the University of Washington and
  1597.    SUMEX.
  1598.  
  1599.    IMAP2 software exists for other platforms; for example Nippon
  1600.    Telephone and Telegraph (NTT) has developed an operational IMAP2
  1601.    client for the NTT ELIS.  Several organizations are working on a PC
  1602.    client.
  1603.  
  1604.    IMAP2 can be used to access mailboxes at very remote sites, where
  1605.    echo delays and frequent outages make TELNET and running a local mail
  1606.    reader intolerable.  For example, from a desktop workstation on the
  1607.    University of Washington local network the author routinely uses
  1608.    IMAP2 to read and manage mailboxes on various University of
  1609.    Washington local servers, at two systems at Stanford University, at a
  1610.    Milnet site, and at a site in Tokyo, Japan.
  1611.  
  1612.    This specification does not make any formal definition of size
  1613.    restrictions, but the DEC-20 server has the following limitations:
  1614.  
  1615.     . length of a mailbox: 7,077,888 characters
  1616.     . maximum number of messages: 18,432 messages
  1617.     . length of a command line: 10,000 characters
  1618.     . length of the local host name: 64 characters
  1619.     . length of a "short" argument: 39 characters
  1620.     . length of a "long" argument: 491,520 characters
  1621.     . maximum amount of data output in a single fetch:
  1622.       655,360 characters
  1623.  
  1624.  
  1625.  
  1626. Crispin                                                        [Page 29]
  1627.  
  1628. RFC 1176                         IMAP2                       August 1990
  1629.  
  1630.  
  1631.    To date, nobody has run up against any of these limitations, many of
  1632.    which are substantially larger than most current user mail reading
  1633.    programs.
  1634.  
  1635. Acknowledgements
  1636.  
  1637.    Bill Yeager and Rich Acuff both contributed invaluable suggestions in
  1638.    the evolution of IMAP2 from the original IMAP.  James Rice pointed
  1639.    out several ambiguities in the previous IMAP2 specification and
  1640.    otherwise would not allow me to leave bad enough along.  Laurence
  1641.    Lundblade reviewed a draft of this version and made several helpful
  1642.    suggestions.
  1643.  
  1644.    Many dedicated individuals have worked on IMAP2 software, including:
  1645.    Mark Crispin, Frank Gilmurray, Christopher Lane, Hiroshi Okuno,
  1646.    Christopher Schmidt, and Bill Yeager.
  1647.  
  1648.    Any mistakes, flaws, or sins of omission in this IMAP2 protocol
  1649.    specification are, however, strictly my own; and the mention of any
  1650.    name above does not imply an endorsement.
  1651.  
  1652. Security Considerations
  1653.  
  1654.    Security issues are not discussed in this memo.
  1655.  
  1656. Author's Address
  1657.  
  1658.    Mark R. Crispin
  1659.    Panda Programming
  1660.    6158 Lariat Loop NE
  1661.    Bainbridge Island, WA 98110-2020
  1662.  
  1663.    Phone: (206) 842-2385
  1664.  
  1665.    EMail: mrc@Tomobiki-Cho.CAC.Washington.EDU
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682. Crispin                                                        [Page 30]
  1683.